# coding=utf-8
from tvtk.api import tvtk
from tvtk.tools import ivtk
from pyface.api import GUI

'''
mytvtk 使用管线计数来吧各个绘图对象给串联起来。tvtk两种管线
    可视化管线：（Vusualization Pipeline),将原始数据加工成图形数据的过程
    图形管线：（Graphic PipeLine),图形数据的加工为我们可以看到的图像的过程。
    从数据到到可视化的全流程
'''

# 创建数据源
s = tvtk.CubeSource(x_length=1.0, y_length=2.0, z_length=3.0)

# 使用PolyDataMapper  将数据转化为图形数据,映射器
m = tvtk.PolyDataMapper(input_connection=s.output_port)
#  创建一个Actor,Action 实体
a = tvtk.Actor(mapper=m)

#创建一个带有Crust  窗口（Python Sehll)
gui = GUI()
win = ivtk.IVTKWithCrustAndBrowser()
win.open()
win.scene.add_actor(a)

#开始界面消息循环
gui.start_event_loop()

#  创建一个Renderer,将actor 加入进去
r = tvtk.Renderer(background=(0, 0, 0))
r.add_actor(a)
#  创建一个RendererWindow,将render加入进去
w = tvtk.RenderWindow(size=(600, 600))
w.add_renderer(r)
# 构建一个RenderWindowInteractor(窗口的交互工具)
i = tvtk.RenderWindowInteractor(render_window=w)
# 开启交互
i.initialize()
i.start()
